package 复制多级文件夹;

import java.io.*;

public class CopyFoldersDemo {
    public static void main(String[] args) throws IOException{
        //创建数据源File对象，路径是E:\\jhxfile
        File srcFile=new File("E:\\jhxfile");
        File destFile=new File("D:\\");
        String srcfile = srcFile.getName();
        //写方法实现文件夹的复制，参数为数据源File对象和目的地File对象

        }

    //复制文件夹的方法
    private static void copyfolder(File srcFile, File destFile) throws IOException{
        //判断数据源File是否是目录
        if (srcFile.isDirectory()){
            //在目的地下创建和数据源File名称一样的目录
            String srcFileName = srcFile.getName();
            File newFloder=new File(destFile,srcFileName);//封装：将要复制的文件放在目的地后面即在目的地文件复制
            if(!newFloder.exists()){
                destFile.mkdir();
            }

            //获取数据源File下所有文件或者目录的File数组
            File[] filearray = srcFile.listFiles();

            //遍历该File数组得到每一个File对象
            for(File file:filearray){
                //把该File作为数据源File对象，递归调用复制文件夹的方法
                copyfolder(file,newFloder);
            }
        }else {
            //说明是文件，直接复制，用字节流
            File newFile=new File(destFile,srcFile.getName());//直接写srcFile.getName
            copyFile(srcFile,newFile);
        }
    }

    private static void copyFile(File srcFile,File destFile)throws IOException{
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destFile));
        byte[] bys= new byte[1024];
        int len;
        while((len= bis.read(bys))!=-1){
            bos.write(bys,0,len);
        }
     bis.close();
     bos.close();
    }
}
